<?php

// +----------------------------------------------------------------------
// | ThinkAdmin
// +----------------------------------------------------------------------
// | 版权所有 2014-2018 东莞市云拓互联网络科技有限公司
// +----------------------------------------------------------------------
// | 官方网站:http://www.ytclouds.net
// +----------------------------------------------------------------------
// | 开源协议 ( https://mit-license.org )
// +----------------------------------------------------------------------
// |
// +----------------------------------------------------------------------

use service\DataService;
use service\NodeService;
use app\webapi\service\AppuserService;
use think\Db;

/**
 * 打印输出数据到文件
 * @param mixed $data 输出的数据
 * @param bool $force 强制替换
 * @param string|null $file
 */
function p($data, $force = false, $file = null)
{
    is_null($file) && $file = env('runtime_path') . date('Ymd') . '.txt';
    $str = (is_string($data) ? $data : (is_array($data) || is_object($data)) ? print_r($data, true) : var_export($data, true)) . PHP_EOL;
    $force ? file_put_contents($file, $str) : file_put_contents($file, $str, FILE_APPEND);
}

/**
 * 判断字段有没有定义
 * @param $data
 * @return string
 */
function isset_assign($data)
{
    return isset($data) ? $data : '';
}


/**
 * 简单版_导出excel
 * @param $strTable
 * @param $filename
 * @param string $args
 */
function downloadExcel($strTable, $filename, $args = '')
{
    header("Content-type: application/vnd.ms-excel");
    header("Content-Type: application/force-download");
    header("Content-Disposition: attachment; filename=" . $filename . "_" . date('Y-m-d') . $args . ".xls");
    header('Expires:0');
    header('Pragma:public');
    echo '<html><meta http-equiv="Content-Type" content="text/html; charset=utf-8" />' . $strTable . '</html>';
}


/**
 * 支付回调
 * @param array $data 第三方返回的参数
 * @return bool
 */
function update_pay_status($data)
{
    $order_sn = $data['order_sn'];
    $count = Db::name('Order')
        ->where(['order_sn' => $order_sn, 'is_pay' => 0])
        ->count();   // 看看有没已经处理过这笔订单  支付宝返回不重复处理操作
    if ($count == 0) return false;
    $order = Db::name('Order')
        ->where("order_sn", $order_sn)
        ->find();
    //更新订单信息
    $updata = [];
    $updata['is_pay'] = 1;
    $updata['out_trade_no'] = $data['out_trade_no'];
    $updata['transaction_id'] = $data['transaction_id'];
    $updata['pay_at'] = date("Y-m-d H:i:s", time());
    $r = Db::name('Order')
        ->where("order_sn", $order_sn)
        ->update($updata);
    if ($r) {
        //查看是否可以抽奖更新次数
        AppuserService::do_pay_add_lottery_count($order['user_id']);
        return true;
    }
    return false;
}


/**
 * RBAC节点权限验证
 * @param string $node
 * @return bool
 */
function auth($node)
{
    return NodeService::checkAuthNode($node);
}

/**
 * 设备或配置系统参数
 * @param string $name 参数名称
 * @param bool $value 默认是null为获取值，否则为更新
 * @return string|bool
 * @throws \think\Exception
 * @throws \think\exception\PDOException
 */
function sysconf($name, $value = null)
{
    static $config = [];
    if ($value !== null) {
        list($config, $data) = [[], ['name' => $name, 'value' => $value]];
        return DataService::save('SystemConfig', $data, 'name');
    }
    if (empty($config)) {
        $config = Db::name('SystemConfig')->column('name,value');
    }
    return isset($config[$name]) ? $config[$name] : '';
}


/**
 * 日期格式标准输出
 * @param string $datetime 输入日期
 * @param string $format 输出格式
 * @return false|string
 */
function format_datetime($datetime, $format = 'Y年m月d日 H:i:s')
{
    return date($format, strtotime($datetime));
}

/**
 * UTF8字符串加密
 * @param string $string
 * @return string
 */
function encode($string)
{
    list($chars, $length) = ['', strlen($string = iconv('utf-8', 'gbk', $string))];
    for ($i = 0; $i < $length; $i++) {
        $chars .= str_pad(base_convert(ord($string[$i]), 10, 36), 2, 0, 0);
    }
    return $chars;
}

/**
 * UTF8字符串解密
 * @param string $string
 * @return string
 */
function decode($string)
{
    $chars = '';
    foreach (str_split($string, 2) as $char) {
        $chars .= chr(intval(base_convert($char, 36, 10)));
    }
    return iconv('gbk', 'utf-8', $chars);
}

/**
 * 下载远程文件到本地
 * @param string $url 远程图片地址
 * @return string
 */
function local_image($url)
{
    return \service\FileService::download($url)['url'];
}
